home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / tools / czesc_3 / password / source / passwordcode.a < prev    next >
Text File  |  1993-04-26  |  8KB  |  424 lines

  1. AbsExecBase    EQU $00000004
  2. CustomChips    EQU $00dff000
  3.  
  4.     include "exec/alerts.i"
  5.     include "exec/execbase.i"
  6.     include "exec/resident.i"
  7.     include "graphics/gfxbase.i"
  8.     include "intuition/screens.i"
  9.     include "devices/input.i"
  10.     include "dos/dosextens.i"
  11.     include "hardware/custom.i"
  12.     include "hardware/dmabits.i"
  13.  
  14.     include "exec/funcdef.i"
  15.     include "exec/exec_lib.i"
  16.  
  17. _LVOCloseScreen        EQU -66
  18. _LVOCloseWorkBench    EQU -78
  19. _LVODisplayBeep        EQU -96
  20. _LVOOpenScreen        EQU -198
  21. _LVOPrintIText        EQU -216
  22.  
  23. _LVOLoadRGB4        EQU -192
  24. _LVOWaitTOF        EQU -270
  25. _LVOGetRGB4        EQU -582
  26.  
  27. BufferSize        EQU 40
  28. BLANK_TIMEOUT        EQU 100
  29.  
  30.     XDEF _PasswordCode
  31.     XDEF _PasswordCodeEnd
  32.  
  33. *************************************************
  34.  
  35. _PasswordCode:
  36.     movem.l a2-a5/d2,-(SP)
  37.  
  38.     lea _PasswordCode(PC),a0
  39.  
  40.     lea ResidentName(PC),a1
  41.     move.l a1,-RT_SIZE+RT_NAME(a0)
  42.     lea ResidentID(PC),a1
  43.     move.l a1,-RT_SIZE+RT_IDSTRING(a0)
  44.  
  45.     move.l a0,d0
  46.     add.l d0,Topaz8Attr+ta_Name-_PasswordCode(a0)
  47.     add.l d0,MyNewScreen+ns_Font-_PasswordCode(a0)
  48.     add.l d0,MyIntuiText+it_IText-_PasswordCode(a0)
  49.  
  50.     move.l AbsExecBase.w,a6
  51.     move.l ThisTask(a6),a4
  52.     lea MyTask(PC),a0
  53.     move.l a4,(a0)
  54.  
  55.     lea InputName(PC),a0
  56.     moveq #0,d0
  57.     lea InputRequest(PC),a1
  58.     move.l a1,a2            ; a2 -> IORequest
  59.     lea MyMsgPort+MP_MSGLIST(PC),a3
  60.     NEWLIST a3
  61.     lea MyMsgPort(PC),a3
  62.     move.l a4,MP_SIGTASK(a3)
  63.     move.b #SIGB_DOS,MP_SIGBIT(a3)
  64.     move.l a3,MN_REPLYPORT(a1)
  65.     moveq #0,d1
  66.     jsr _LVOOpenDevice(a6)
  67.  
  68.     lea Interrupt(PC),a0
  69.     move.l a0,IO_DATA(a2)
  70.     move.w #IND_ADDHANDLER,IO_COMMAND(a2)
  71.     lea InputHandler(PC),a1
  72.     move.l a1,IS_CODE(a0)
  73.     move.b #127,LN_PRI(a0)
  74.     move.l a2,a1
  75.     jsr _LVODoIO(a6)
  76.  
  77.     lea GfxName(PC),a1
  78.     moveq #0,d0
  79.     jsr _LVOOpenLibrary(a6)
  80.     move.l d0,a4            ; a4 -> GfxBase
  81.     lea MyGfxBase(PC),a0
  82.     move.l a4,(a0)
  83.     lea MyNewScreen(PC),a0
  84.     move.w gb_NormalDisplayRows(a4),d0
  85.     sub.w #18,d0
  86.     lsr.w #1,d0
  87.     move.w d0,ns_TopEdge(a0)
  88.     move.w gb_NormalDisplayColumns(a4),ns_Width(a0)
  89.  
  90.     lea IntuitionName(PC),a1
  91.     moveq #0,d0
  92.     jsr _LVOOpenLibrary(a6)
  93.     move.l d0,a6
  94.  
  95.     lea MyNewScreen(PC),a0
  96.     jsr _LVOOpenScreen(a6)
  97.     move.l d0,a5            ; a5 -> Screen
  98.     lea MyScreen(PC),a0
  99.     move.l a5,(a0)
  100.  
  101.     move.w #DMAF_SPRITE,CustomChips+dmacon
  102.     move.w #0,CustomChips+spr+sd_dataa
  103.     move.w #0,CustomChips+spr+sd_dataB
  104.  
  105.     move.l a6,a3
  106.     move.l a4,a6
  107.     lea sc_ViewPort(a5),a0
  108.     move.l vp_ColorMap(a0),a0
  109.     move.l a0,d2
  110.     moveq #0,d0
  111.     jsr _LVOGetRGB4(a6)
  112.     lea StdColorTable(PC),a0
  113.     move.w d0,(a0)
  114.     moveq #1,d0
  115.     move.l d2,a0
  116.     jsr _LVOGetRGB4(a6)
  117.     lea StdColorTable+2(PC),a0
  118.     move.w d0,(a0)
  119.     move.l a3,a6
  120.  
  121.     lea sc_RastPort(a5),a0
  122.     lea MyIntuiText(PC),a1
  123.     move.w MyNewScreen+ns_Width(PC),d0
  124.     sub.w #23*8,d0
  125.     lsr.w #1,d0
  126.     moveq #0,d1
  127.     jsr _LVOPrintIText(a6)
  128.     bra.s AskPassword1
  129.  
  130. AskPassword:
  131.     move.l a5,a0
  132.     jsr _LVODisplayBeep(a6)
  133.  
  134. AskPassword1:
  135.     lea BufferIndex(PC),a0
  136.     clr.w (a0)
  137.     lea MyIntuiText(PC),a1
  138.     lea TryText(PC),a0
  139.     move.l a0,it_IText(a1)
  140.     move.b Tries(PC),d0
  141.     add.b #'0',d0
  142.     move.b d0,(a0)
  143.     moveq #10,d1
  144.     moveq #0,d0
  145.     lea sc_RastPort(a5),a0
  146.     jsr _LVOPrintIText(a6)
  147.  
  148.     move.l a6,a3
  149.     move.l AbsExecBase.w,a6
  150.     move.l #SIGBREAKF_CTRL_C,d0
  151.     jsr _LVOWait(a6)
  152.     move.l a3,a6
  153.  
  154.     lea Buffer(PC),a0
  155.     lea Password(PC),a1
  156. CheckPassword:
  157.     move.b (a0),d0
  158.     cmp.b (a1)+,d0
  159.     bne.s WrongPassword
  160.     cmp.b #$fe,(a0)+
  161.     bne.s CheckPassword
  162.     beq.s CorrectPassword
  163.  
  164. WrongPassword:
  165.     lea Tries(PC),a0
  166.     addq.b #1,(a0)
  167.     cmp.b #4,(a0)
  168.     blt.s AskPassword
  169.  
  170.     lea sc_RastPort(a5),a0
  171.     lea MyIntuiText(PC),a1
  172.     lea WrongText(PC),a2
  173.     move.l a2,it_IText(a1)
  174.     moveq #0,d0
  175.     moveq #10,d1
  176.     jsr _LVOPrintIText(a6)
  177.  
  178.     move.l a4,a6
  179. WrongPasswordLoop:
  180.     lea Red1ColorTable(PC),a1
  181.     bsr.s SwitchColor
  182.     lea Red2ColorTable(PC),a1
  183.     bsr.s SwitchColor
  184.     bra.s WrongPasswordLoop
  185.  
  186. CorrectPassword
  187.     move.l a5,a0
  188.     jsr _LVOCloseScreen(a6)
  189.  
  190.     jsr _LVOCloseWorkBench(a6)
  191.  
  192.     move.l a6,a1
  193.     move.l AbsExecBase.w,a6
  194.     jsr _LVOCloseLibrary(a6)
  195.  
  196.     move.l a4,a1
  197.     jsr _LVOCloseLibrary(a6)
  198.  
  199.     move.w #IND_REMHANDLER,IO_COMMAND(a2)
  200.     lea Interrupt(PC),a0
  201.     move.l a0,IO_DATA(a2)
  202.     move.l a2,a1
  203.     jsr _LVODoIO(a6)
  204.  
  205.     move.l a2,a1
  206.     jsr _LVOCloseDevice(a6)
  207.  
  208.     lea TermKey(PC),a0
  209.     cmp.b #$44,(a0)
  210.     beq.s AllDone
  211.  
  212. ; Insert code to be executed when F1 is used instead of RETURN
  213.     nop
  214.  
  215. AllDone:
  216.     moveq #0,d0
  217.     movem.l (SP)+,a2-a5/d2
  218.     rts
  219.  
  220. SwitchColor:
  221.     lea sc_ViewPort(a5),a0
  222.     moveq #2,d0
  223.     jsr _LVOLoadRGB4(a6)
  224.     moveq #10,d2
  225. SwitchColorLoop:
  226.     jsr _LVOWaitTOF(a6)
  227.     jsr _LVOWaitTOF(a6)
  228.     jsr _LVOWaitTOF(a6)
  229.     jsr _LVOWaitTOF(a6)
  230.     jsr _LVOWaitTOF(a6)
  231.     dbf d2,SwitchColorLoop
  232.     lea BlankTimer(PC),a1
  233.     move.w #BLANK_TIMEOUT,(a1)
  234.     rts
  235.  
  236. *************************************************
  237.  
  238. InputHandler:
  239.     movem.l a0/a2-a6/d2-d7,-(SP)
  240.  
  241. EventLoop:
  242.     cmp.b #IECLASS_RAWKEY,ie_Class(a0)
  243.     bne NotRAWKEY
  244.     bsr UnblankScreen
  245.     move.b ie_Code+1(a0),d0
  246.     bmi.s NextEvent
  247.     cmp.b #$44,d0
  248.     beq.s PasswordDone
  249.     cmp.b #$50,d0
  250.     beq.s PasswordDone
  251.     cmp.b #$60,d0
  252.     bge.s NextEvent
  253.     cmp.b #$41,d0
  254.     beq.s Backspace
  255.     move.w ie_Qualifier(a0),d1
  256.     and.w #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT,d1
  257.     beq.s StoreCode
  258.     or.w #$80,d0
  259. StoreCode:
  260.     lea BufferIndex(PC),a2
  261.     move.w (a2),d1
  262.     cmp.w #BufferSize-2,d1
  263.     beq.s NextEvent
  264.     lea Buffer(PC),a1
  265.     move.b d0,(a1,d1.w)
  266.     addq.w #1,(a2)
  267.  
  268. NextEvent:
  269.     cmp.b #IECLASS_TIMER,ie_Class(a0)
  270.     beq.s IsTimer
  271.     clr.b ie_Class(a0)
  272. IsTimer:
  273.     move.l ie_NextEvent(a0),a0
  274.     move.l a0,d0
  275.     bne.s EventLoop
  276.  
  277. EventLoopDone:
  278.     movem.l (SP)+,a0/a2-a6/d2-d7
  279.     move.l a0,d0
  280.     rts
  281.  
  282. Backspace:
  283.     lea BufferIndex(PC),a1
  284.     tst.w (a1)
  285.     beq.s NextEvent
  286.     subq.w #1,(a1)
  287.     bra.s NextEvent
  288.  
  289. PasswordDone:
  290.     lea BufferIndex(PC),a2
  291.     move.w (a2),d1
  292.     lea Buffer(PC),a1
  293.     move.b #$fe,(a1,d1.w)
  294.  
  295.     lea TermKey(PC),a1
  296.     move.b d0,(a1)
  297.     move.l AbsExecBase.w,a6
  298.     move.l #SIGBREAKF_CTRL_C,d0
  299.     move.l MyTask(PC),a1
  300.     jsr _LVOSignal(a6)
  301.     bra.s EventLoopDone
  302.  
  303. NotRAWKEY:
  304.     cmp.b #IECLASS_RAWMOUSE,ie_Class(a0)
  305.     bne.s NotRAWMOUSE
  306.     bsr.s UnblankScreen
  307.     bra.s NextEvent
  308.  
  309. NotRAWMOUSE:
  310.     cmp.b #IECLASS_TIMER,ie_Class(a0)
  311.     bne.s NextEvent
  312.     lea ScreenBlanked(PC),a2
  313.     tst.b (a2)
  314.     bne.s NextEvent
  315.     lea BlankTimer(PC),a1
  316.     subq.w #1,(a1)
  317.     bne.s NextEvent
  318.     addq.b #1,(a2)
  319.     move.l a0,a2
  320.     move.l MyGfxBase(PC),a6
  321.     move.l MyScreen(PC),a0
  322.     lea sc_ViewPort(a0),a0
  323.     lea BlankColorTable(PC),a1
  324.     moveq #2,d0
  325.     jsr _LVOLoadRGB4(a6)
  326.     move.l a2,a0
  327.     bra NextEvent
  328.  
  329. UnblankScreen:
  330.     lea ScreenBlanked(PC),a1
  331.     tst.b (a1)
  332.     beq.s NotBlanked
  333.     clr.b (a1)
  334.     move.l a0,a2
  335.     move.l MyGfxBase(PC),a6
  336.     move.l MyScreen(PC),a0
  337.     lea sc_ViewPort(a0),a0
  338.     lea StdColorTable(PC),a1
  339.     moveq #2,d0
  340.     jsr _LVOLoadRGB4(a6)
  341.     move.l a2,a0
  342. NotBlanked:
  343.     lea BlankTimer(PC),a1
  344.     move.w #BLANK_TIMEOUT,(a1)
  345.     rts
  346.  
  347. *************************************************
  348.  
  349. MyTask        dc.l 0
  350. MyScreen    dc.l 0
  351. MyGfxBase    dc.l 0
  352.  
  353. Topaz8Attr    dc.l TopazName-_PasswordCode
  354.         dc.w 8
  355.         dc.b 0,0
  356.  
  357. MyNewScreen    dc.w 0,0
  358.         dc.w 0,18
  359.         dc.w 1
  360.         dc.b 0,1
  361.         dc.w V_HIRES
  362.         dc.w CUSTOMSCREEN!SCREENQUIET
  363.         dc.l Topaz8Attr-_PasswordCode
  364.         dc.l 0
  365.         dc.l 0
  366.         dc.l 0
  367.  
  368. MyIntuiText    dc.b 1,0
  369.         dc.b RP_JAM2
  370.         dc.b 0
  371.         dc.w 0,0
  372.         dc.l 0
  373.         dc.l HeaderText-_PasswordCode
  374.         dc.l 0
  375.  
  376. BufferIndex:    dc.w 0
  377.  
  378. BlankTimer:    dc.w BLANK_TIMEOUT
  379.  
  380. StdColorTable    dc.w 0,0
  381. BlankColorTable    dc.w $0000,$0000
  382. Red1ColorTable    dc.w $0f00,$0000
  383. Red2ColorTable    dc.w $0000,$0f00
  384.  
  385. InputRequest    dcb.b IOSTD_SIZE,0
  386. Interrupt    dcb.b IS_SIZE,0
  387. MyMsgPort    dcb.b MP_SIZE,0
  388.  
  389. Tries        dc.b 1
  390. ScreenBlanked    dc.b 0
  391. TermKey        dc.b 0
  392. InputName    dc.b "input.device",0
  393. IntuitionName    dc.b "intuition.library",0
  394. GfxName        dc.b "graphics.library",0
  395. TopazName    dc.b "topaz.font",0
  396.     IFD DEUTSCH
  397. HeaderText    dc.b "Bitte Passwort eingeben",0
  398. TryText        dc.b "1. Versuch",0
  399.         IFD DEUTSCH1
  400. WrongText    dc.b "Falsches Passwort! Hacker! Spion! Mörder! Tyrann!",0
  401.         ELSE
  402. WrongText    dc.b "Falsches Passwort!",0
  403.         ENDC
  404.     ELSE
  405. HeaderText    dc.b "Please enter password",0
  406. TryText        dc.b "1. Try",0
  407. WrongText    dc.b "Wrong password!",0
  408.     ENDC
  409.  
  410. ResidentName    dc.b "Password",0
  411. ResidentID    dc.b "Password © 23-Feb-93 Christian Stieber",0
  412.  
  413. Buffer:        dcb.b BufferSize,0
  414.  
  415. Version:    dc.b "$VER: Password 1.1 (26.04.93)",0
  416.  
  417. Password    dcb.b BufferSize,$fe
  418.  
  419. *************************************************
  420.  
  421. _PasswordCodeEnd:
  422.  
  423.         END
  424.